#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <queue>
#include <algorithm>

using namespace std;

//int main() {
//    //int a = 328, b = 7751;
//    int a, b;
//    cin >> a >> b;
//    int min = a, max = b;
//    if (b < a) {
//        min = b;
//        max = a;
//    };
//    int copy = min;
//    while (min >= 1)
//    {
//        if (min == 50)
//        {
//            cout << "sd";
//        }
//        if (max % min == 0 && copy % min == 0) {
//            cout << (max * copy) / min;
//            return 0;
//        }
//        min--;
//    }
//}

//int main()
//{
//
//    //vector<int> arr = { 7, 9, 0, 1, 10, 8 };
//    vector<int> arr = { 1, 1, 1};
//    vector<int> arr1 = { 7,8,2,6,1,1,7,2,4,3,4,7,5,6,8,2};
//    // 0 1 7 8 9 10
//    int MLS(vector<int>&arr) {
//        // sort(arr1.begin(), arr1.end());
//        // vector<int> arr;
//        // int curval = arr1[0];
//        // for (int i = 1; i < arr1.size(); i++) {
//        //     if (curval != arr1[i]) {
//        //         arr.push_back(curval);
//        //         curval = arr1[i];
//        //     }
//        // }
//        // if (arr1[arr1.size() - 1] != arr[arr.size() - 1])
//        // {
//        //     arr.push_back(arr1[arr1.size() - 1]);
//        // }
//        // int ret = 1;
//        // int left = 0, right = 0;
//        // for (; right < arr.size(); right++) {
//        //     if (!(right + 1 < arr.size() && arr[right] + 1 == arr[right + 1])) {
//        //         continue;
//        //     }
//        //     left = right++;
//        //     while (right < arr.size()) {
//        //         if ((right + 1 < arr.size()) && (arr[right] + 1 == arr[right + 1])) {
//        //             right++;
//        //         }
//        //         else {
//        //             break;
//        //         }
//        //     }
//        //     if(ret < right - left + 1){
//        //         ret = right - left + 1;
//        //     }
//
//        // }
//        // return ret;
//        sort(arr.begin(), arr.end());
//        int ret = 1;
//        int count = 1;
//        for (int i = 1; i < arr.size(); i++) {
//            if (arr[i] == arr[i - 1]) {
//                continue;
//            }
//            else if (arr[i] == arr[i - 1] + 1) {
//                count++;
//            }
//            else {
//                count = 1;
//            }
//            ret = max(ret, count);
//        }
//        return ret;
//}

//int main() {
//    int n1;
//    int n, m;
//    string target = "love";
//    cin >> n1 >> m;
//    n = n1;
//    vector<string> mat;
//    while (n1--) {
//        string tmp;
//        cin >> tmp;
//        // cout << tmp << endl;
//        mat.push_back(tmp);
//    }
//    // dfs(input, 0, 0);
//    vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));
//    for (int i = 1; i <= n; i++) {
//        for (int j = 1; j <= m; j++) {
//            int ret = target.find(mat[i - 1][j - 1]) != string::npos ? (4 - target.find(mat[i - 1][j - 1])) : 0;
//            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + ret;
//        }
//    }
//    cout << dp[n][m];
//}